package TUILayer;
import ModelLayer.*;
import java.util.Scanner;
import ControlLayer.*;
import java.util.ArrayList;

/**
 * Write a description of class LagerUI here.
 * 
 * @author (your name) 
 * @version (a version number or a date)
 */
public class LagerUI
{
    private VarerCtr varerctr;
    private Varer varer;
    private ArrayList<Varer> nyvare;
    private ArrayList<String> nyantal;

    /**
     * Constructor for objects of class LagerUI
     */
    public LagerUI()
    {
        varerctr = VarerCtr.getInstance();
        nyvare = new ArrayList<Varer>();
        nyantal = new ArrayList<String>();
    }

    /**
     * Starter Ui'et
     */
    public void start()
    {
        lagerMenu();
    }

    /**
     * Goer det muligt for brugeren at goere et valg
     */
    public void lagerMenu()
    {
        boolean exit = false;
        while(!exit)
        {
            int choice = writeLagerMenu();
            if(choice == 1){
                tilfoejvare();
            }
            else{
                if(choice == 2){
                    fjernvare();
                }
                else{
                    if(choice == 3){
                        listAlleVarer();
                    }
                    else{
                        if(choice == 4){
                            findvareInformation();
                        }
                        else{
                            if(choice == 5){
                                tilfoejEksemplar();
                            }
                            else{
                                if(choice == 6){
                                    fjernEksemplar();
                                }
                                else{
                                    if(choice == 7){
                                        listAlleEksemplar();
                                    }
                                    else{
                                        if(choice == 8){
                                            ordreTilGrossist();
                                        }
                                        else{
                                            if(choice == 9){
                                                exit = true;
                                            }
                                            else{
                                                System.out.println("Forkert Kommando");
                                                waitForInput();
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }

    /**
     * Venter til brugeren har trykket enter
     */
    private void waitForInput()
    {
        System.out.println("\nPres Enter For At Fortseatte");
        new Scanner(System.in).nextLine();
    }

    /**
     * Skriver Lager Menuen
     */
    private int writeLagerMenu()
    {
        Scanner keyboard = new Scanner(System.in);

        System.out.println("\f *** Lager Menu ***");
        System.out.println(" (1) Tilføj Vare");
        System.out.println(" (2) Fjern Vare");
        System.out.println(" (3) List Alle Varer I Kataloget");
        System.out.println(" (4) Find Vare Information");
        System.out.println("");
        System.out.println(" *** Indkøb ***");
        System.out.println(" (5) Tilføj Vare Eksplar(er)");
        System.out.println(" (6) Fjern Vare Eksemplar Fra Lager");
        System.out.println(" (7) List Alle Vare Eksemplarer");
        System.out.println(" (8) Opret Ordre Til Grossit");
        System.out.println(" (9) Return");
        System.out.print("\n Gør dit valg: ");

        int choice = keyboard.nextInt();
        return choice;
    }

    /**
     * Goer det muligt for brugeren at indtaste ID
     */
    private int inputID()
    {
        Scanner keyboard = new Scanner(System.in);
        System.out.println("\nIndtast Varens ID");
        int id = keyboard.nextInt();
        return id;
    }

    /**
     * Goer det muligt for brugeren at indtaste Antal
     */
    private String inputAntal()
    {
        Scanner keyboard = new Scanner(System.in);
        System.out.println("\nIndtast Ønsket Antal");
        String antal = keyboard.nextLine();
        return antal;
    }

    /**
     * Goer det muligt for brugeren at indtaste Beskrivelse
     */
    private String inputBeskrivelse()
    {
        Scanner keyboard = new Scanner(System.in);
        System.out.println("\nIndtast Vare Beskrivelse");
        String beskrivelse = keyboard.nextLine();
        return beskrivelse;
    }

    /**
     * Goer det muligt for brugeren at indtaste Vare Navn
     */
    private String inputVareNavn()
    {
        Scanner keyboard = new Scanner(System.in);
        System.out.println("\nIndtast Vare Navn");
        String navn = keyboard.nextLine();
        return navn;
    }

    /**
     * Goer det muligt for brugeren at indtaste Pris
     */
    private double inputVarePris()
    {
        Scanner keyboard = new Scanner(System.in);
        System.out.println("\nIndtast Varens Salgs Pris");
        double pris = keyboard.nextDouble();
        return pris;
    }

    /**
     * Goer det muligt for brugeren at indtaste serienummer
     */
    private long inputSerienummer()
    {
        Scanner keyboard = new Scanner(System.in);
        System.out.println("\nIndtast Eksemplarets Serienummer");
        long serienummer = keyboard.nextLong();
        return serienummer;
    }

    /**
     * Goer det muligt for brugeren at indtaste indkoebspris
     */
    private double inputIndkoebspris()
    {
        Scanner keyboard = new Scanner(System.in);
        System.out.println("\nIndtast Eksemplarets Indkoebs Pris");
        double pris = keyboard.nextDouble();
        return pris;
    }

    /**
     * Goer det muligt for brugeren at foretage et valg
     */
    private String inputTilfoejvarer()
    {
        Scanner keyboard = new Scanner(System.in);
        System.out.println("\nOenskes Flere Varer? (y/n)");
        String yn = keyboard.nextLine();
        return yn;
    }

    /**
     * Tilfoejer en varer
     */
    private void tilfoejvare()
    {
        int id = inputID();
        
        String beskrivelse = inputBeskrivelse();
        
        while (beskrivelse.length() < 5) {
            System.out.println("Ikke gyldig beskrivelse");
            beskrivelse = inputBeskrivelse();
        }
        
        String vareNavn = inputVareNavn();
        
        while (vareNavn.length() < 2) {
            System.out.println("Ikke gyldigt navn");
            vareNavn = inputVareNavn();
        }
        
        double pris = inputVarePris();

        varerctr.opretVare(id, beskrivelse, vareNavn, pris);
        System.out.println("Vare Oprettet");
        
        waitForInput();
    }

    
    /**
     * Goer det muligt for brugeren at fjerne en vare
     */
    private void fjernvare()
    {
        int id = inputID();
        Varer varer = varerctr.findVare(id);

        if(varer != null){
            varerctr.fjernVare(id);
        }
        else{
            System.out.println("Ingen Vare Med Dette ID");
            waitForInput();
        }
    }

    /**
     * Goer det muligt for brugeren at liste alle varer
     */
    private void listAlleVarer()
    {
        for(Varer varer : varerctr.listAllevarer())
            System.out.println("Vare Navn: " + varer.getVarenavn() + " - ID: " + varer.getId());
        waitForInput();
    }

    /**
     * Goer det muligt for brugeren at finde specifik vare information
     */
    private void findvareInformation()
    {
        int id = inputID();
        Varer varer = varerctr.findVare(id);

        if(varer != null){
            System.out.println("\fVare Information:");
            System.out.println("");
            System.out.println("Navn: " + varer.getVarenavn());
            System.out.println("Beskrivelse: " + varer.getBeskrivelse());
            System.out.println("Pris: " + varer.getPris() + "kr.");
            System.out.println("ID: " + varer.getId());
            System.out.println("Antal Eksemplarer Paa Lager: " + varer.listEksemplarStoerelse());

            waitForInput();
        }
        else{
            System.out.println("\fIngen Vare Med Dette ID");
            waitForInput();
        }
    }

    /**
     * Goer det muligt for brugeren at tilfoeje et eksemplar
     */
    private void tilfoejEksemplar()
    {
        int id = inputID();
        Varer varer = varerctr.findVare(id);

        if(varer != null){
            long serienummer = inputSerienummer();
            double indkoebspris = inputIndkoebspris();
            varerctr.opretVareEksemplar(varer, serienummer, indkoebspris);
            System.out.println("Eksemplar Oprettet");
            waitForInput();
        }
        else{
            System.out.println("Ingen vare med dette ID");
            waitForInput();
        }
    }

    /**
     * Goer det muligt for brugeren atfjerne et eksemplar
     */
    private void fjernEksemplar()
    {
        long serienummer = inputSerienummer();

        if(varerctr.fjernVareEksemplar(serienummer)){
            System.out.println("Varer eksemplar fjernet");
            waitForInput();
        }else{
            System.out.println("Intet eksemplar med dette serienummer");
            waitForInput();
        }
    }

    /**
     * Goer det muligt for brugeren at liste alle eksemplar
     */
    private void listAlleEksemplar()
    {
        int id = inputID();
        Varer varer = varerctr.findVare(id);

        if(varer != null){
            varer.printAlleEksemplar();
            waitForInput();
        }
        else{
            System.out.println("Ingen vare med dette ID");
            waitForInput();
        }
    }

    /**
     * Goer det muligt for brugeren at oprette en ordre til grossisten
     */
    private void ordreTilGrossist()
    {
        String yn = inputTilfoejvarer();

        if(yn.equals("y")){
            while(yn.equals("y")){       
                int id = inputID();
                Varer varer = varerctr.findVare(id);
                if(varer != null){
                    nyvare.add(varer);
                    String antal = inputAntal();
                    nyantal.add(antal);
                    inputTilfoejvarer();
                    if(inputTilfoejvarer().equals("n")){
                        yn = "n";
                    }
                }
                else{
                    System.out.println("\nIngen vare med dette ID");
                }
            }
            if(yn.equals("n")){
                ordreFeardig();
            }
        }
        else{
            System.out.println("Forkert Valg");
        }
    }

    /**
     * Ordre feardig bruges til grossist ordre
     */
    private void ordreFeardig()
    {
        System.out.println("\n\fOrdre afsendt, kvittering");
        printbekreaftelse();
        nyvare.clear();
        nyantal.clear();
        waitForInput();
    }

    /**
     * Printer grossist ordrebekreaftelse
     */
    private void printbekreaftelse()
    {
        System.out.println("\n*** Ordre Bekreaftelse ***");
        System.out.println("");
        System.out.println("Bestilte Varer: ");
        System.out.println("");
        System.out.println("Total Pris: ");
        System.out.println("");
        System.out.println("Forventet Levering: ");
        System.out.println("");
        System.out.println("******************************");
    }
}